본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
Apache Virtual Host; 아파치 가상 호스트
아파치 웹 서버 하나로 여러 개의 웹사이트(도메인)를 함께 운영하는 기능

가상 호스트는 서버 한 대, 아파치 하나로 www.a.com 과 www.b.com 같은 여러 사이트를 서비스하게 한다. 사이트마다 문서 루트(DocumentRoot)와 로그를 따로 둘 수 있다. 들어온 요청을 어느 사이트로 보낼지는 접속한 IP 주소나 요청에 담긴 호스트 이름으로 가른다.

종류 구분 기준 쓰임
이름 기반(Name-based) HTTP 요청의 Host 헤더에 적힌 도메인 이름 IP 주소 하나에 여러 도메인을 운영한다. 가장 흔한 방식
IP 기반(IP-based) 요청이 들어온 서버의 IP 주소(또는 포트) 사이트마다 IP 주소를 따로 둔다
  • 아파치 2.4 는 같은 IP·포트에 VirtualHost 블록이 여럿 있으면 자동으로 이름 기반으로 동작한다. 2.2 까지는 NameVirtualHost *:80 을 먼저 적어야 했다
  • 어느 블록의 ServerName·ServerAlias 와도 맞지 않는 요청은 처음 적은 블록이 받는다(기본 사이트)
  • 도메인마다 DNS 에서 이 서버의 IP 주소를 가리키게 해 두어야 한다

소스로 설치한 아파치는 가상 호스트 설정을 conf/extra/httpd-vhosts.conf 에 따로 두고, httpd.conf 에서 이 파일을 불러온다.

# httpd.conf
Include conf/extra/httpd-vhosts.conf

# conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot "/home/a/public_html"
    ServerName www.a.com
    ServerAlias a.com
    ErrorLog "logs/a.com-error_log"
    CustomLog "logs/a.com-access_log" common
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/home/b/public_html"
    ServerName www.b.com
</VirtualHost>
  • ServerName : 이 블록이 받을 도메인 이름
  • ServerAlias : 같은 사이트로 받을 다른 이름
  • 레드햇 계열 패키지(httpd)는 /etc/httpd/conf.d/*.conf 를 자동으로 읽으므로 /etc/httpd/conf.d/vhost.conf 처럼 파일을 만들어 적는다. 데비안 계열은 /etc/apache2/sites-available/ 에 만들고 a2ensite 로 켠다
  • 설정을 확인하려면 httpd -S(apachectl -S)로 가상 호스트 목록을, apachectl configtest 로 문법을 본다
  • HTTPS 사이트는 <VirtualHost *:443> 블록에 SSLEngine on 과 인증서 경로를 적는다(소스 설치는 extra/httpd-ssl.conf)

httpd-vhosts.conf 와 다른 extra 파일

편집 원본 편집

extra 디렉터리에는 기능별 설정 파일이 따로 있다. 가상 호스트는 httpd-vhosts.conf 이고, 사용자 홈 디렉터리(UserDir)는 httpd-userdir.conf, 서버 상태 페이지는 httpd-info.conf, MPM 의 프로세스·스레드 수는 httpd-mpm.conf 다. 전체 목록은 리눅스 httpd.conf 에 있다.